﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace ProyectoDeTesis.Controladores
{
    public class SimulacionController
    {
        private ConfiguracionController configuracionController = new ConfiguracionController();
        public List<Simulacion> obtenerHistorialSimulacion(DateTime fecha_inicio, DateTime fecha_fin)
        {
            List<Simulacion> listaSimulacion = new List<Simulacion>();
            var db = new Bd_tesisDataContext();           

            try
            {
                var query = from s in db.Simulacion
                            where s.fecha >= fecha_inicio && s.fecha <= fecha_fin.AddDays(1)
                            select s;

                listaSimulacion = query.ToList();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return listaSimulacion;
        }

        public Simulacion ingresarSimulacion(DateTime fecha)
        {
            Simulacion simulacion = new Simulacion();
            Configuracion configuracion = configuracionController.obtenerConfiguracion();
            var db = new Bd_tesisDataContext();
            try
            {
                simulacion.fecha = fecha;
                simulacion.fecha_creacion = DateTime.Now;
                simulacion.configuracion_id = configuracion.id;
                db.Simulacion.InsertOnSubmit(simulacion);
                db.SubmitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return simulacion;
        }

        public void guardarResultadosAlgoritmo(List<ResultadoAlgoritmo> listaResultadoAlgoritmo, DateTime fecha)
        {            
            var db = new Bd_tesisDataContext();
            Simulacion simulacion = new Simulacion();
            Configuracion configuracion = configuracionController.obtenerConfiguracion();
            List<ResultadoAlgoritmo> lista = new List<ResultadoAlgoritmo>();
            try
            {
                simulacion.fecha = fecha;
                simulacion.fecha_creacion = DateTime.Now;
                simulacion.configuracion_id = configuracion.id;
                db.Simulacion.InsertOnSubmit(simulacion);
                db.SubmitChanges();

                foreach (ResultadoAlgoritmo ra in listaResultadoAlgoritmo)
                {
                    ResultadoAlgoritmo resultado = new ResultadoAlgoritmo();
                    resultado.puerta_id = ra.puerta_id;
                    resultado.fin_abordaje = ra.fin_abordaje;
                    resultado.inicio_abordaje = ra.inicio_abordaje;
                    resultado.num_puerta = ra.num_puerta;
                    resultado.num_vuelo = ra.num_vuelo;
                    ra.simulacion_id = simulacion.id;
                    resultado.simulacion_id = simulacion.id;
                    resultado.vuelo_id = ra.vuelo_id;
                    db.ResultadoAlgoritmo.InsertOnSubmit(resultado);
                }
                db.SubmitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

        public Simulacion obtenerSimulacion(DateTime fecha)
        {
            Simulacion simulacion = null;
            var db = new Bd_tesisDataContext();
            try
            {
                var query = from s in db.Simulacion
                            where s.fecha == fecha
                            select s;

                simulacion = query.First();
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            return simulacion;
        }
    }
}
